【セキュアアカウント切り戻し手順】AWS CloudTrail セキュア設定切り戻し手順のご案内
こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。
当エントリではクラスメソッドメンバーズが提供しているセキュアアカウントサービス有効化に伴う、AWS CloudTrailのセキュア設定(ログファイルSSE-KMS暗号化設定)を切り戻す手順についてご案内いたします。
セキュアアカウントとは
クラスメソッドでは、セキュリティに関するベストプラクティスをまるっと施した状態のAWSアカウントをお客様に提供しております。
クラスメソッドメンバーズご利用の全てのお客様がご利用可能ですので、この機会にご検討ください。
セキュアアカウントのアーキテクチャ
セキュアアカウントでは下記の設定が施されています。
各設定の詳細は下記記事や仕様書をご参照ください。
今回の切り戻し対象のサービス
今回はセキュアアカウントにてAWS CloudTrail ログファイルSSE-KMS暗号化(上図赤枠部)を切り戻す手順についてご紹介します。
AWS CloudTrail ログファイルSSE-KMS暗号化とは
CloudTrailで作成した証跡では、保存されるログファイルの暗号化が行われます。
デフォルトではSSE-S3と呼ばれるAWS S3マネージドなキーを用いた暗号化が行われるのですが、ユーザーが管理するカスタマーマネージドキーを使ったSSE-KMSと呼ばれる暗号化をオプションで有効化出来ます。
セキュアアカウントではカスタマーマネージドキーを使ったSSE-KMSが有効化されています。
料金
この設定でかかる料金は下記の通りです。
- カスタマーマネージドキーの管理費用
- $2/月(セキュアアカウントでは自動ローテーションが有効化されているため)
- ユーザーがログファイルを暗号化/復号する費用
- $0.03/10,000req(毎月20,000req分は無料)
- CloudTrailが暗号化/復号する際には費用はかからない
環境の規模や運用方法にもよりますが、月に数ドル程度と費用は少額です。
AWS KMSの料金詳細については下記資料をご参照ください。
前提
オプトイン無効化作業
セキュアアカウント設定の切り戻し作業を行う際は、メンバーズポータルサイトのセキュア設定をご確認いただき、オプトインが有効化の場合は無効化にしていただく必要があります。
メンバーズポータルサイトから対象のアカウントIDを選択します。
下記画面から、メンバーズサービス設定を選択します。
新しくタブが開かれるので、セキュリティ設定を選択します。
セキュア設定項目にて、「AWS CloudTrail」の項目を無効化に変更します。
設定を変更後、必ず画面右下の「保存」ボタンを押して下さい。
切り戻し手順
切り戻し手順の選択方法
本記事では切り戻し手順をクラスメソッドメンバーズポータル(CMP)から行う方法と、CloudShellから行う方法の二種類ご紹介します。 それぞれのメリットと想定パターンを記載しますので、切り戻し手順の選択の参考にしてください。
[クラスメソッドメンバーズポータル(CMP)から行う方法]
- ベーシック設定に自動で切り戻しをしたい
- 切り戻し作業のみなら権限設定が不要(※現在の状態確認をCloudShellで実施する場合は必要)
[CloudShellから行う方法]
- 東京リージョンは切り戻しを行わないなど、特定のリージョンを切り戻し対象から除外したい
- ベーシック設定の記録除外リソースに、任意の除外リソースを追加したい
切り戻し作業者に必要なIAM権限
今回の切り戻し作業を行うために作業者に必要なアクセス許可は以下となります。
- [読み取り]
- cloudtrail:DescribeTrails
- s3:GetEncryptionConfiguration
- [書き取り]
- cloudtrail:UpdateTrail
- s3:PutEncryptionConfiguration
また、CloudShellを利用するためには AWSCloudShellFullAccess
というIAMポリシーをご利用ください。
現在のステータスを確認する
まずは現在の設定を確認します。
CloudShellを開き、以下のコマンドを実行して下さい。(CloudShellの使い方はこちら)
for REGION in $(aws ec2 describe-regions --query "sort(Regions[].RegionName)" --output text); do ENCRYPTION=$(aws cloudtrail describe-trails --region "${REGION}" --trail-name-list Members --query 'trailList[].KmsKeyId' --output text 2>/dev/null) if [ -n "$ENCRYPTION" ]; then echo "${REGION}: 有効" else echo "${REGION}: 無効" fi done
証跡が作成されているのは東京リージョンですが、念の為全リージョンの情報を出力しています。
ap-northeast-1: 有効
ap-northeast-2: 有効
ap-northeast-3: 有効
ap-south-1: 有効
ap-southeast-1: 有効
ap-southeast-2: 有効
ca-central-1: 有効
eu-central-1: 有効
eu-north-1: 有効
eu-west-1: 有効
eu-west-2: 有効
eu-west-3: 有効
sa-east-1: 有効
us-east-1: 有効
us-east-2: 有効
us-west-1: 有効
us-west-2: 有効
上記のように全リージョンで「有効」が出ていれば確認完了です。
クラスメソッドメンバーズポータル(CMP)からの切り戻し
前提作業の「オプトイン無効化作業」と同様に、CMPから メンバースサービス設定 -> セキュリティ設定 を開きます。
ベーシック設定項目 にて、「AWS Config」の項目を有効化にし、保存します。 セキュア設定項目にも「AWS Config」がありますが、ベーシック設定とセキュア設定の両方が有効化されている場合、セキュア設定が優先 されますのでご注意ください。
設定を変更後、必ず画面右下の「保存」ボタンを押して下さい。
翌土曜日に設定が上書きされ、セキュア設定からクラスメソッド基準のベーシック設定(アカウントお渡し時の初期設定)に切り戻されます。
CloudShellからの切り戻し
CloudShellで行う手順は以下の2つです。
- CloudTrailのログファイル暗号化設定を無効にする
- S3バケットのデフォルト暗号化設定をSSE-S3に変更する
CloudTrailのログファイル暗号化設定を無効にする
無効化コマンドは下記です。CloudShellで実行します。
aws cloudtrail update-trail --name Members --kms-key-id "" --region ap-northeast-1
先ほどの確認コマンドをもう一度実行します。
for REGION in $(aws ec2 describe-regions --query "sort(Regions[].RegionName)" --output text); do ENCRYPTION=$(aws cloudtrail describe-trails --region "${REGION}" --trail-name-list Members --query 'trailList[].KmsKeyId' --output text 2>/dev/null) if [ -n "$ENCRYPTION" ]; then echo "${REGION}: 有効" else echo "${REGION}: 無効" fi done
以下の内容が出力されれば確認完了です。
ap-northeast-1: 無効
ap-northeast-2: 無効
ap-northeast-3: 無効
ap-south-1: 無効
ap-southeast-1: 無効
ap-southeast-2: 無効
ca-central-1: 無効
eu-central-1: 無効
eu-north-1: 無効
eu-west-1: 無効
eu-west-2: 無効
eu-west-3: 無効
sa-east-1: 無効
us-east-1: 無効
us-east-2: 無効
us-west-1: 無効
us-west-2: 無効
それでは次にS3バケットの設定も変更します。
S3バケットのデフォルト暗号化設定をSSE-S3に変更する
実はCloudTrailだけではなくS3バケットのデフォルト暗号化設定も同じカスタマーマネージドキーを使ったSSE-KMSになっています。
対象のバケット名を確認するために下記コマンドを実施します。
aws cloudtrail describe-trails --trail-name-list Members --query 'trailList[].S3BucketName' --output text
まずは現状を確認します。下記の確認コマンドを実行します。
ENCRYPTION_TYPE=$(aws s3api get-bucket-encryption \ --bucket cm-members-cloudtrail-706587535044 \ --region ap-northeast-1 --query 'ServerSideEncryptionConfiguration.Rules[].ApplyServerSideEncryptionByDefault.SSEAlgorithm' --output text) if [ ${ENCRYPTION_TYPE} == "aws:kms" ]; then echo "SSE-KMS is enabled" elif [ ${ENCRYPTION_TYPE} == "AES256" ]; then echo "SSE-S3 is enabled" else echo "Default encryption is not set" fi
SSE-KMS is enabled
と表示されれば次の設定変更コマンドを実行して下さい。このコマンドは実行しても何も表示されません。
aws s3api put-bucket-encryption \ --bucket cm-members-cloudtrail-706587535044 \ --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}' --region ap-northeast-1
最後に再度デフォルト暗号化の状態を確認します。先ほど実行した確認コマンドを実行します。
SSE-S3 is enabled
と表示されれば作業は完了です。お疲れ様でした。
【注意】カスタマーマネージドキーの削除について
料金の項でも説明した通り、カスタマーマネージドキーの管理には毎月$2の料金がかかります。
ただし、このカスタマーマネージドキーを削除してしまうと現在取得済みのログファイルを参照(復号)することが出来なくなってしまいます。
また、このカスタマーマネージドキーはAWS Configのログファイルの暗号化にも利用されています。
そのため、もうConfigやCloudTrailのログファイルを参照する必要が無い方のみ削除をご検討ください。
※CloudTrailのログファイルが保存されているバケットには保存されてから3年後にファイルが削除されるライフサイクルルールが設定されています。
削除の手法については下記ドキュメントをご参照ください。
【おまけ】再度有効化したい場合
切り戻したセキュア設定を元に戻したい場合、メンバーズポータルサイトから再有効化することが可能です。 設定反映は毎週土曜日午前2時ごろから順次開始されます。
メンバーズポータルサイトから対象のアカウントIDを選択します。
下記画面から、メンバーズサービス設定を選択します。
新しくタブが開かれるので、セキュリティ設定を選択します。
セキュア設定項目にて、「AWS CloudTrail」の項目を有効化にして保存します。
最後に
本記事がどなたかのお役に立てれば幸いです。
以上、べこみんでした。